DeadLock 死結,發生的條件基本上就是有限的資源共用,同時多個事件並行等等,最終資源耗盡只能等待事件完成釋放,而事件等待新的資源發放。這個是Jenkins常發生的逾時情況之一,解法就只能對事件進行仲裁。
我對Jenkins最納悶的問題:Jenkins預設沒有逾時設定,但發生逾時確很頻繁?
本篇同步發表於:http://www.gibar.co/2014/10/jenkins-build-timeout-plugin.html
當然資源競爭的問題無法請Jenkins解決,也不能期待GC解決。而且造成逾時的問題,還有像網路環境不穩定、機房乖乖過期等。但是造成的結果有一點是相同的,後面多的人在排隊呢!我們可以先看看一個有趣的單位,目前他們 Hudson(Jenkins)運行的情況。
https://hudson.jboss.org/hudson/ 以下是寫這篇文章時的取材狀態
還好Jenkins的外掛很厲害,作業逾時這種基本需求,肯定有外掛可用,就是Build-timeout Plugin。我們可以利用Build-timeout,來定義各種可能是造成逾時的情況,來中止作業佔用資源無限等待。
本篇相關外掛
我們要模擬幾種逾時的情況,測試驗證 Build-timeout 是否有正常運作
安裝build-timeout後,設定會出現在各個專案的組態設定中
Time-out strategy 逾時模式
Time-out actions 逾時處理
測試的方法很簡單,我們只會使用兩個SHELL指令,
測試內容,指定超過3分鐘時算逾時,並用sleep模擬200秒的等待。
我們先用sleep指令,做出三次平均90秒的成功建置。指定超過平均150%算逾時,再模擬185秒的等待,反應的結果要為取消建置。
指定超過30秒沒有輸出,就算逾時,測試15秒/25秒/35秒各輸出一次,應該要在35秒出現中止。
作業逾時強制中止作業,只是為了讓系統不要全面性停工的手段。如果作業有資源超用的情況,應該還是要用其它手段來防治。例如讓高資源需求的作業到指定的slave進行。或是將他們的排程時間安排於不同時段進行。
中止作業很簡單,很爆力,很強大。但如果被中止作業很重要,我們也要想辦法重新讓他再運行一次。重試,就是中止最佳配套方案,但要注意必需是要有限的重試。
下一篇:砍掉重練 - 我總是相信下一次就會好了
本篇同步發表於:http://www.gibar.co/2014/10/jenkins-build-timeout-plugin.html